Product
Socket Now Supports uv.lock Files
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
callable-instance
Advanced tools
This module allows you to create an ES6 class that is callable as a function. The invocation is sent to one of the object's normal prototype methods.
npm install callable-instance
ExampleClass
instances have all of the normal properties and methods, but are actually functions as well.
var CallableInstance = require('callable-instance');
class ExampleClass extends CallableInstance {
constructor() {
// CallableInstance accepts the name of the property to use as the callable
// method.
super('instanceMethod');
}
instanceMethod() {
console.log("instanceMethod called!");
}
}
var test = new ExampleClass();
// Invoke the method normally
test.instanceMethod();
// Call the instance itself, redirects to instanceMethod
test();
// The instance is actually a closure bound to itself and can be used like a
// normal function.
test.apply(null, [ 1, 2, 3 ]);
All instances of CallableMethod are also an instances of Function, and have all of Function's properties.
Libraries that accept functions will expect that they behave as Function objects do. For example, if you alter the semantics of the call
or apply
methods, library code may fail to work with your callable instance. In these cases, you can simply bind the instance method to the callable instance and pass that instead (e.g. test.instanceMethod.bind(test)
).
This can also cause problems if your derived class wants to have a name
or length
property, which are built-in properties and not configurable by default. You can have your class disable the built-in descriptors of these properties to make them available for your use.
var test = new ExampleClass();
test.name = "hello!"
console.log(test.name); // Will print 'instanceMethod'
class NameableClass extends CallableInstance {
constructor() {
super('instanceMethod');
Object.defineProperty(this, 'name', {
value: void 0,
enumerable: true,
writeable: true,
configurable: true
});
}
instanceMethod() {
console.log(this.name);
}
}
test = new NameableClass();
test.name = "hello!";
console.log(test.name); // Will print 'hello!'
git checkout -b my-new-feature
git commit -am 'Add some feature'
git push origin my-new-feature
Information for the implementation came from this StackOverflow answer.
Distributed under the MIT license.
FAQs
Instances of classes which are directly callable as functions.
The npm package callable-instance receives a total of 3,976 weekly downloads. As such, callable-instance popularity was classified as popular.
We found that callable-instance demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
Research
Security News
Socket researchers have discovered multiple malicious npm packages targeting Solana private keys, abusing Gmail to exfiltrate the data and drain Solana wallets.
Security News
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.